package org.explugin.lang.lexer;

import com.intellij.lang.Language;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.IFileElementType;
import org.explugin.lang.ExLanguage;

public interface ExTokenTypes {

    IFileElementType FILE = new IFileElementType(Language.findInstance(ExLanguage.class));
    IElementType WRONG = TokenType.BAD_CHARACTER;

    IElementType TYPE_TOKEN = new ExElementType("TYPE_TOKEN");
    IElementType VAR_TOKEN = new ExElementType("VAR_TOKEN");

    IElementType FUNC_TOKEN = new ExElementType("FUNC_TOKEN");
    IElementType WHILE_TOKEN = new ExElementType("WHILE_TOKEN");
    IElementType IF_TOKEN = new ExElementType("IF_TOKEN");

    IElementType ELSE_TOKEN = new ExElementType("ELSE_TOKEN");
    IElementType BREAK_TOKEN = new ExElementType("BREAK_TOKEN");
    IElementType CONTINUE_TOKEN = new ExElementType("CONTINUE_TOKEN");

    IElementType RETURN_TOKEN = new ExElementType("RETURN_TOKEN");
    IElementType FALSE_TOKEN = new ExElementType("FALSE_TOKEN");

    IElementType TRUE_TOKEN = new ExElementType("TRUE_TOKEN");
    IElementType NUMBER_TOKEN = new ExElementType("NUMBER_TOKEN");

    IElementType STRING_TOKEN = new ExElementType("STRING_TOKEN");
    IElementType WHITESPACE = new ExElementType("WHITESPACE");
    IElementType IDENTIFIER = new ExElementType("IDENTIFIER");

    IElementType COMMENT = new ExElementType("COMMENT");
    IElementType AND_TOKEN = new ExElementType("AND_TOKEN");

    IElementType OR_TOKEN = new ExElementType("OR_TOKEN");
    IElementType EQ_TOKEN = new ExElementType("EQ_TOKEN");
    IElementType GE_TOKEN = new ExElementType("GE_TOKEN");
    IElementType LE_TOKEN = new ExElementType("LE_TOKEN");
    IElementType GT_TOKEN = new ExElementType("GT_TOKEN");
    IElementType LT_TOKEN = new ExElementType("LT_TOKEN");

    IElementType NE_TOKEN = new ExElementType("NE_TOKEN");
    IElementType MINUS_TOKEN = new ExElementType("MINUS_TOKEN");
    IElementType MULT_TOKEN = new ExElementType("MULT_TOKEN");
    IElementType MOD_TOKEN = new ExElementType("MOD_TOKEN");
    IElementType DIV_TOKEN = new ExElementType("DIV_TOKEN");

    IElementType ASSIGN_TOKEN = new ExElementType("ASSIGN_TOKEN");
    IElementType LCURLY_TOKEN = new ExElementType("LCURLY_TOKEN");
    IElementType RCURLY_TOKEN = new ExElementType("RCURLY_TOKEN");
    IElementType LPAREN_TOKEN = new ExElementType("LPAREN_TOKEN");
    IElementType RPAREN_TOKEN = new ExElementType("RPAREN_TOKEN");
    IElementType PLUS_TOKEN = new ExElementType("PLUS_TOKEN");
    IElementType COMMA_TOKEN = new ExElementType("COMMA_TOKEN");
    IElementType SEMICOLON_TOKEN = new ExElementType("SEMICOLON_TOKEN");
    IElementType COLON_TOKEN = new ExElementType("COLON_TOKEN");
}
